﻿Option Explicit On
Option Strict On

' XML & LINQ namespace om met XML-bestanden en LINQ queryes te kunnen werken
Imports System.Xml
Imports System.Xml.Linq

' I.O namespace om bestanden te kunnen openen en lezen
Imports System.IO

' ControlChars namespace om speciale karakters te kunnen gebruiken waaronder Newline
Imports Microsoft.VisualBasic.ControlChars
Imports System.Windows.Forms

'Include the SYSTEM Reflection and OUTLOOK namespaces
Imports System.Reflection
Imports Outlook1 = Microsoft.Office.Interop.Outlook
Imports Microsoft.Office.Interop.Outlook
Imports System.Threading


Public Class Form1

    Dim stap1 As Boolean = False
    Dim stap2 As Boolean = False
    Dim stap3 As Boolean = False
    Dim outlookReminder As Boolean = False

    Dim gekozenVak As String = ""
    Dim gekozenKlas As String = ""

    Dim aantalKlassenOngefilterd As Integer
    Dim aantalKlassenGefilterd As Integer
    Dim aantalVakkenOngefilterd As Integer
    Dim aantalVakkenGefilterd As Integer

    Dim XMLFileVakkenEmpty As Boolean = False
    Dim XMLFileKlassenEmpty As Boolean = False

    'Dit zijn global Arrays die worden gebruikt om datums op te slaan deze zijn nodig voor de export
    Dim vakantieBeginDatumGlobal(10) As Date
    Dim vakantieEindDatumGlobal(10) As Date
    Dim beginDatumLesroosterGlobal(1) As Date
    Dim eindDatumLesroosterGlobal(1) As Date
    Dim lesWeken(50) As Date

    Dim shutDownApplication As Boolean


    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        TBOX_XMLInput.Enabled = False
    End Sub


    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If shutDownApplication = True Then
            Me.Close()
        Else
            Dim bericht As String
            bericht = getCurrentUsername() & ", weet u zeker dat u het programma wilt afsluiten?"
            If MessageBox.Show(bericht, "Afsluiten?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                e.Cancel = False
            Else
                e.Cancel = True
            End If
        End If
    End Sub

    Private Sub BTN_Openen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_Openen.Click
        openbestand()
    End Sub


    Private Sub OpenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenToolStripMenuItem.Click
        openbestand()
    End Sub

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Sluitapplicatie()
    End Sub

    Private Sub IndexToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IndexToolStripMenuItem.Click
        openUrlHelpsysteem()
    End Sub

    Private Sub ContentsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContentsToolStripMenuItem.Click
        Process.Start("http://localhost/Gebruikershandleiding.pdf")
    End Sub




    Private Sub OptionsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OptionsToolStripMenuItem.Click
        Dim bericht As String = ""
        Dim FILE_NAME As String = "log.txt"
        If System.IO.File.Exists(FILE_NAME) = False Then
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME, True)
            objWriter.Write(bericht)
            objWriter.Close()
            Process.Start("log.txt")
        Else
            Process.Start("log.txt")
        End If
    End Sub

    Private Sub openbestand()
        OpenFileDialog1.Title = "Open tekst- of csv-bestand"
        OpenFileDialog1.Filter = "Tekst Bestand|*.txt|CSV Bestand|*.csv"

        OpenFileDialog1.ShowDialog()
        ' Lees het tekstbestand volledig uit, verwijzing naar de methode readTextFile
        readTextFile(OpenFileDialog1.FileName)
    End Sub

    Private Sub saveFile()
        OpenFileDialog1.Title = "Open tekst- of csv-bestand"
        OpenFileDialog1.Filter = "Tekst Bestand|*.txt|CSV Bestand|*.csv"

        OpenFileDialog1.ShowDialog()
        ' Lees het tekstbestand volledig uit, verwijzing naar de methode readTextFile
        readTextFile(OpenFileDialog1.FileName)

        SaveFileDialog1.Title = ""
        SaveFileDialog1.Filter = "XML Bestand|*.xml|Tekst Bestand|*.txt"

        SaveFileDialog1.OverwritePrompt = True

        SaveFileDialog1.ShowDialog()
    End Sub

    Private Sub Sluitapplicatie()
        Dim bericht As String
        bericht = getCurrentUsername() & ", weet u zeker dat u het programma wilt afsluiten?"
        DialogResult = MessageBox.Show(bericht, "Afsluiten?", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If DialogResult = Windows.Forms.DialogResult.Yes Then
            ' Globale variabel shutDownApplication op True zetten zodat het formClosing event wordt omzeild. 
            ' Anders krijg je 2x een messagebox met de vraag of je wilt afsluiten
            ' zie Private Sub Form1_FormClosing() helemaal bovenin
            shutDownApplication = True
            Me.Close()
        End If
    End Sub

    Private Sub closeFile()
        stap1 = False
        stap2 = False
        stap3 = False

        TBOX_Invoer.Clear()
        TBOX_XMLInput.Clear()
        tboxXMLOutput.Clear()

        TBOX_XMLInput.Enabled = False
        TBOX_XMLInput.Visible = False

        tboxXMLOutput.Enabled = False
        tboxXMLOutput.Visible = False



    End Sub

    Private Sub readTextFile(ByVal pad As String)
        Dim inhoud As String
        Try
            ' Lees het tekst bestand uit, en geef het weer in een textbox
            ' Neem een StreamReader classe om het tekstbestand uit te lezen
            Dim objStreamReader As StreamReader
            objStreamReader = File.OpenText(pad)

            ' Lees de hele bestand naar de string inhoud
            inhoud = objStreamReader.ReadToEnd()

            ' Vul de textbox met de variabele contents
            TBOX_Invoer.Text = inhoud

            ' Sluit de StreamReader class
            objStreamReader.Close()

            If inhoud.IndexOf("AA01 gp-Untis") <> -1 Then


                BTN_Openen.Enabled = False
                BTN_Openen.Visible = True
                BTN_maakxml.Enabled = True

                MessageBox.Show("Het UNTIS bestand is succesvol geladen." & NewLine & "Klik nu op de knop aanmaken.", _
                                "Informatie", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Else
                closeFile()
                MessageBox.Show("U dient een UNTIS-bestand te openen!", "Ongeldige CSV-bestand", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
            'Catch ex As Exception
        Catch exceptionObject As SystemException

        End Try
    End Sub

    Private Sub createXML()
        Dim output(9000) As String
        Dim i As Integer = 0
        Dim iDag As Integer = 0

        ' Breng de gebruiker op de hoogte dat het aanmaken van een XML-bestand enige tijd kan duren, verwijzing naar methode
        ' messageCreateXML()

        Static start_time As DateTime
        Static stop_time As DateTime
        Dim elapsed_time As TimeSpan
        Dim tijd As String




        start_time = Now

        For Each regel In TBOX_Invoer.Lines
            iDag = iDag + 1
            If regel.IndexOf("0U") = 0 Or regel.IndexOf("Uf") = 0 Or regel.IndexOf("Uk") = 0 Or regel.IndexOf("Ul") = 0 Or regel.IndexOf("Ur") = 0 Or regel.IndexOf("UZ0") = 0 Then 'Or regel.IndexOf("00K") = 0 Then

                i = i + 1

                If regel.IndexOf("0U") = 0 Then
                    ' Selecteer de Week => 0U is de tag voor de weken
                    Dim huidigeRegel_0U() As String
                    Dim teZoekenString As String = regel

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_0U = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_0U)
                        huidigeRegel_0U(n) = huidigeRegel_0U(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_0U(n) = checkCharacterReference(huidigeRegel_0U(n))
                    Next

                    'MessageBox.Show(huidigeRegel_0U(2))

                    Dim week As String = huidigeRegel_0U(2)
                    Dim weekOutput As String = ""


                    If huidigeRegel_0U(2) <> Nothing Then
                        week = week.Remove(0, 2)
                        ' Functie getWeken retourneert de weken in leesbare formaat
                        ' wk1-57-10 wordt bijvoorbeeld 1,2,3,4,5,7,8,9,10
                        ' wk18-10 wordt bijvoorbeeld 1,8,9,10
                        getWeken(week)

                        For n = 0 To LBOX_Weken.Items.Count - 1
                            If n <> LBOX_Weken.Items.Count - 1 Then
                                weekOutput = weekOutput + LBOX_Weken.Items(n).ToString & ","
                            Else
                                weekOutput = weekOutput + LBOX_Weken.Items(n).ToString
                            End If
                        Next
                    Else
                        ' Zodra in het UNTIS bestand geen week is opgegeven door de roostermaker
                        ' dan doen we er niets mee. Tenzij T.Huberts ermee akkoord gaat dat we
                        ' een weekRandomizer gaan toepassen.
                        weekOutput = ""
                    End If


                    If i > 1 Then
                        output(i) = "</vak>" & NewLine & "<vak>" & NewLine & "<week>" & weekOutput & "</week>"
                    Else
                        output(i) = "<vak>" & NewLine & "<week>" & weekOutput & "</week>"
                    End If

                ElseIf regel.IndexOf("Uf") = 0 Then
                    ' Selecteer het vak => Uf is de tag voor de vakken
                    Dim huidigeRegel_Uf() As String
                    Dim teZoekenString As String = regel

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Uf = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Uf)
                        huidigeRegel_Uf(n) = huidigeRegel_Uf(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Uf(n) = checkCharacterReference(huidigeRegel_Uf(n))
                    Next

                    'MessageBox.Show(huidigeRegel_Uf(2))
                    output(i) = "<vaknaam>" & huidigeRegel_Uf(2) & "</vaknaam>"

                ElseIf regel.IndexOf("Uk") = 0 Then
                    ' Selecteer de klassen => Uk is de tag voor de klassen
                    Dim huidigeRegel_Uk() As String
                    Dim teZoekenString As String = regel
                    Dim klassen As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Uk = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Uk)
                        huidigeRegel_Uk(n) = huidigeRegel_Uk(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Uk(n) = checkCharacterReference(huidigeRegel_Uk(n))
                    Next

                    For x = 1 To UBound(huidigeRegel_Uk)
                        If huidigeRegel_Uk(x) <> "" Then
                            klassen = klassen + ", " & huidigeRegel_Uk(x)
                        End If
                    Next

                    ' Haal de eerste comma weg uit de variabel klassen
                    klassen = klassen.Remove(0, 1)
                    klassen = klassen.Trim

                    ' De functie seperateKlassen zorgt ervoor dat klassen dus wanneer er meer dan 1 klas
                    ' op een regel staat, deze op aparte regels worden geplaatst.
                    ' De reden hiervoor is dat we anders niet goed gebruik kunnen maken van LINQ queries
                    klassen = seperateKlassen(klassen)

                    'output(i) = "<klas>" & klassen & "</klas>"
                    output(i) = klassen

                ElseIf regel.IndexOf("Ul") = 0 Then
                    ' Selecteer de leraren => Ul is de tag voor de leraren
                    Dim huidigeRegel_Ul() As String
                    Dim teZoekenString As String = regel
                    Dim leraren As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Ul = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Ul)
                        huidigeRegel_Ul(n) = huidigeRegel_Ul(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Ul(n) = checkCharacterReference(huidigeRegel_Ul(n))
                    Next

                    For x = 1 To UBound(huidigeRegel_Ul)
                        If huidigeRegel_Ul(x) <> "" Then
                            leraren = leraren + ", " & huidigeRegel_Ul(x)
                        End If
                    Next

                    ' Haal de eerste comma weg uit de variabel leraren
                    leraren = leraren.Remove(0, 1)
                    leraren = leraren.Trim

                    'MessageBox.Show(leraren)

                    output(i) = "<leraar>" & leraren & "</leraar>"

                ElseIf regel.IndexOf("Ur") = 0 Then
                    ' Selecteer de klaslokalen => Ur is de tag voor de klaslokalen
                    Dim huidigeRegel_Ur() As String
                    Dim teZoekenString As String = regel
                    Dim klaslokalen As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_Ur = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_Ur)
                        huidigeRegel_Ur(n) = huidigeRegel_Ur(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_Ur(n) = checkCharacterReference(huidigeRegel_Ur(n))
                    Next

                    For x = 1 To UBound(huidigeRegel_Ur)
                        If huidigeRegel_Ur(x) <> "" Then
                            klaslokalen = klaslokalen + ", " & huidigeRegel_Ur(x)
                        End If
                    Next

                    ' Haal de eerste comma weg uit de variabel leraren
                    klaslokalen = klaslokalen.Remove(0, 1)
                    klaslokalen = klaslokalen.Trim

                    'MessageBox.Show(klaslokalen)

                    output(i) = "<lokaal>" & klaslokalen & "</lokaal>"

                ElseIf regel.IndexOf("UZ0") = 0 Then

                    ' Selecteer de dagen en uren => UZ01 is de tag voor de dagen en uren waarop het vak gegeven wordt
                    Dim huidigeRegel_UZ01() As String
                    Dim teZoekenString As String = regel
                    Dim dagenEnUren As String = ""

                    ' Split de huidige regel op basis van de comma's
                    huidigeRegel_UZ01 = Split(teZoekenString, ",")

                    For n = 0 To UBound(huidigeRegel_UZ01)
                        huidigeRegel_UZ01(n) = huidigeRegel_UZ01(n).Trim
                        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
                        ' voorbeelden zijn de tekens <, >, &, ' en "
                        huidigeRegel_UZ01(n) = checkCharacterReference(huidigeRegel_UZ01(n))
                    Next

                    'MessageBox.Show(huidigeRegel_UZ0(1))

                    output(i) = "<dagenuur>" & huidigeRegel_UZ01(1) & "</dagenuur>"

                End If

            End If
        Next

        Dim xml As String = ""
        For y = 0 To UBound(output)
            xml = xml + output(y) & NewLine
        Next

        xml = xml.Trim()

        TBOX_XMLInput.Visible = False
        TBOX_XMLInput.Enabled = False
        'tboxXMLOutput.Visible = True

        TBOX_XMLInput.Text = CStr(xml)

        ''debug
        Dim xmlDeclaratie As String
        Dim input As String

        xmlDeclaratie = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "UTF-8" & Chr(34) & "?>"

        tboxXMLOutput.AppendText(CStr(xmlDeclaratie & NewLine & "<vakken>" & NewLine))
        TBOX_XMLInput.AppendText(CStr(NewLine & "</vak>" & NewLine & "</vakken>"))

        input = TBOX_XMLInput.Text

        tboxXMLOutput.AppendText(CStr(input))
        ''debug

        'MessageBox.Show(CStr(i))

        ' Breng de gebruiker op de hoogte dat het omzetten van het UNTIS bestand
        ' met succes voltooid is. De gebruiker ziet ook hoeveel tijd het heeft geduurd.
        stop_time = Now
        elapsed_time = stop_time.Subtract(start_time)
        tijd = elapsed_time.TotalSeconds.ToString("0.0")
        'messageXMLCreatedSucces(tijd)

        ' De onderstaande methodes lezen de datum gegevens uit het UNTIS bestand
        ' dit betreffen de data van de beginperiode van een kwartaal en de 
        ' data van de vakanties
        getBeginDatumLesrooster()
        getVakantieWeken()

        ' De methode makeRoosterXML maakt een complete XML-bestand aan met het complete
        ' lesrooster 
        makeRoosterXML(tboxXMLOutput.Text)

        ' De methode gotoStap2 verzorgt de verwerkingen die moeten gebeuren om naar de 2e tabblad
        ' te kunnen. 
        gotoStap2()

    End Sub


    

    Private Sub CBOX_klassen_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBOX_klassen.SelectedIndexChanged
        Dim selectedItem As String
        ' De variabele selectedItem bevat de klas die de gebruiker heeft geselecteerd uit de listbox
        selectedItem = CStr(CBOX_klassen.Items(CBOX_klassen.SelectedIndex))

        ' De variabele gekozenKlas wordt gebruikt om een gefilterde XML-bestand aan te maken
        ' het gefilterde XML-bestand bevat nodes die alle elementen bevatten die noodzakeijk zijn
        ' om het rooster in MS Outlook te kunnen zetten
        gekozenKlas = selectedItem

        DialogResult = MessageBox.Show("U heeft klas: " & selectedItem & " geselecteerd. Wilt u met deze klas verder gaan?", "Informatie", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

        ' functie gotoStap3 verzorgt de verwerkingen die moeten gebeuren om naar de 3e tabblad
        ' te kunnen. De variabele selectedItem wordt als parameter meegestuurd, de variabele bevat
        ' de naam van het geselecteerde klas uit de combobox

        If DialogResult = Windows.Forms.DialogResult.Yes Then
            gotoStap3(selectedItem)
        End If
    End Sub

    Private Sub CBOX_Vakken_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CBOX_vakken.SelectedIndexChanged
        Dim selectedItem As String
        ' De variabele selectedItem bevat het vak die de gebruiker heeft geselecteerd uit de listbox
        selectedItem = CStr(CBOX_vakken.Items(CBOX_vakken.SelectedIndex))

        ' De variabele gekozenVak wordt gebruikt om een gefilterde XML-bestand aan te maken
        ' het gefilterde XML-bestand bevat nodes die alle elementen bevatten die noodzakeijk zijn
        ' om het rooster in MS Outlook te kunnen zetten
        gekozenVak = selectedItem

        DialogResult = MessageBox.Show("U heeft het vak: " & selectedItem & " geselecteerd. Wilt u met dit vak verder gaan?", "Informatie", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

        ' functie gotoStap4 verzorgt de verwerkingen die moeten gebeuren om naar de 4e tabblad
        ' te kunnen. De variabele selectedItem wordt als parameter meegestuurd, de variabele bevat
        ' de naam van het geselecteerde klas uit de combobox

        If DialogResult = Windows.Forms.DialogResult.Yes Then
            gotoStap4(selectedItem)
        End If
    End Sub

    Private Sub gotoStap2()
        BTN_maakxml.Visible = True
        BTN_maakxml.Enabled = False
        tboxXMLOutput.Enabled = True

        ' De read Methoden zorgen ervoor dat de klassen en vakken uit worden gelezen 
        ' en in een array worden geplaatst
        readKlassen()
        readVakken()
    End Sub

    Private Function gotoStap3(ByVal klas As String) As String
        ' Maak de tekstboxen leeg
        TBOX_MijnKlasOngefilterd.Clear()
        TBOX_MijnKlasGefilterd.Clear()

        ' Op basis van de klas dat de gebruiker gekozen heeft maken we een aparte XML-bestand aan waarin
        ' alle vakken staan die bij de klas hoort. Zie Private sub cboxKlassen_SelectedIndexChanged, welke
        ' het aanroepende programma code is.
        makeKlassenOngefilterdXML(klas)
        makeKlassenGefilterdXML(klas)

        ' Lees de XML-bestanden uit via de functie readXMLFiles
        ' we doen dit omdat we straks willen weten hoeveel items er 
        ' naar Outlook worden geëxporteerd. We gaan namelijk de nodes
        ' uit de onderstaande XML-files naast elkaar leggen en aan de hand daarvan
        ' kunnen we afleiden hoeveel gegevens er zijn afgevallen!
        readXMLFiles("mijnKlasOngefilterd.xml", "tboxMijnKlasOngefilterd")
        readXMLFiles("mijnKlasGefilterd.xml", "tboxMijnKlasGefilterd")

        countXMLNodes("tboxMijnKlasOngefilterd")
        countXMLNodes("tboxMijnKlasGefilterd")


        ' Zet de variabel stap2 op true zodat de 32e tabblad zichtbaar wordt
        stap2 = True


        Return Nothing
    End Function

    Private Function gotoStap4(ByVal vak As String) As String
        ' Maak de tekstboxen leeg
        TBOX_MijnVakOngefilterd.Clear()
        TBOX_MijnVakgefilterd.Clear()

        ' Op basis van de klas dat de gebruiker gekozen heeft maken we een aparte XML-bestand aan waarin
        ' alle vakken staan die bij de klas hoort. Zie Private sub cboxKlassen_SelectedIndexChanged, welke
        ' het aanroepende programma code is.
        makeVakkenOngefilterdXML(vak)
        makeVakkenGefilterdXML(vak)

        ' Lees de XML-bestanden uit via de functie readXMLFiles
        ' we doen dit omdat we straks willen weten hoeveel items er 
        ' naar Outlook worden geëxporteerd. We gaan namelijk de nodes
        ' uit de onderstaande XML-files naast elkaar leggen en aan de hand daarvan
        ' kunnen we afleiden hoeveel gegevens er zijn afgevallen!
        readXMLFiles("mijnVakOngefilterd.xml", "tboxMijnVakOngefilterd")
        readXMLFiles("mijnVakGefilterd.xml", "tboxMijnVakGefilterd")

        countXMLNodes("tboxMijnVakOngefilterd")
        countXMLNodes("tboxMijnVakGefilterd")




        BTN_Exporteer.Enabled = True
        Return Nothing
    End Function

    Private Sub xmlExport()
        SaveFileDialog1.Title = "Sla het XML-bestand op"
        SaveFileDialog1.Filter = "XML-Bestand|*.xml"

        SaveFileDialog1.OverwritePrompt = True
        SaveFileDialog1.ShowDialog()

        Dim bestand As String
        bestand = SaveFileDialog1.FileName


        If System.IO.File.Exists(bestand) = True Then
            Dim objWriter As New System.IO.StreamWriter(bestand)
            objWriter.Write(TBOX_XMLInput.Text)
            objWriter.Close()
            MessageBox.Show("XML-bestand is geëxporteerd.")
        Else
            MessageBox.Show("Bestand bestaat niet!")
        End If

    End Sub

    Private Function getCurrentUsername() As String
        Dim gebruikersNaam = Environment.UserName.ToString
        Return gebruikersNaam
    End Function

    Private Function checkCharacterReference(ByVal word As String) As String
        ' Functie checkCharacterReference controleert of er geen tekens zijn die XML niet kan parsen
        ' voorbeelden zijn de tekens <, >, &, ' en "

        If word.IndexOf("&") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("&")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&amp;")

        ElseIf word.IndexOf(">") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf(">")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&gt;")

        ElseIf word.IndexOf("<") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("<")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&lt;")

        ElseIf word.IndexOf("'") <> -1 Then
            Dim pos As Integer
            pos = word.IndexOf("'")
            word = word.Remove(pos, 1)
            word = word.Insert(pos, "&apos;")
        End If

        Return word
    End Function

    Private Sub openUrlHelpsysteem()
        Dim webAdres As String = "http://localhost"
        Process.Start(webAdres)

    End Sub

    Private Sub readKlassen()
        Dim regel As String
        Dim tempArrKlassen(9000000) As String
        Dim arrKlassen(9000000) As String

        Dim i As Integer = 0
        Dim x As Integer = 0
        Dim tempRegel As String = ""
        Dim output As String = ""

        For Each regel In TBOX_Invoer.Lines
            i = i + 1
            If regel.Contains("00K") = True Then
                ' Variabel X bevat buiten de for each loop het totaal aantal gevonden klassen
                x = x + 1
                tempArrKlassen = Split(regel, ",")
                arrKlassen(i) = tempArrKlassen(1)

                output = output + "," & arrKlassen(i)
            End If
        Next
        TBOX_klassen.Text = output
        vulListboxKlassen()
    End Sub

    Private Sub readVakken()
        Dim regel As String
        Dim tempArrVakken(9000000) As String
        Dim arrVakken(9000000) As String

        Dim i As Integer = 0
        Dim x As Integer = 0
        Dim tempRegel As String = ""
        Dim output As String = ""

        For Each regel In TBOX_Invoer.Lines
            i = i + 1
            If regel.Contains("00M") = True Or regel.Contains("00F") = True Then
                ' Variabel X bevat buiten de for each loop het totaal aantal gevonden Vakken
                x = x + 1
                tempArrVakken = Split(regel, ",")
                arrVakken(i) = tempArrVakken(1)

                output = output + "," & arrVakken(i)
            End If

        Next
        TBOX_vakken.Text = output
        vulLboxVakken()
    End Sub

    Private Sub vulListboxKlassen()
        Dim klassen() As String
        Dim regel As String

        regel = TBOX_klassen.Text
        klassen = Split(regel, ",")

        For n = 1 To UBound(klassen)
            CBOX_klassen.Items.Add(klassen(n))
        Next
    End Sub

    Private Sub vulLboxVakken()
        Dim vakken() As String
        Dim regel As String

        regel = TBOX_vakken.Text
        vakken = Split(regel, ",")

        For n = 1 To UBound(vakken)
            CBOX_vakken.Items.Add(vakken(n))
        Next
    End Sub



    Private Function getWeken(ByVal input As String) As String
        Dim eersteBlok As String = ""
        Dim lengteBlok1 As Integer

        Dim tweedeblok As String
        Dim posTeken1 As Integer
        Dim posTeken2 As Integer

        posTeken1 = input.IndexOf("-")

        If posTeken1 = -1 Then
            ' Wanneer er geen min-teken gevonden is dan gaan we ervan uit dat de weekformat
            ' bijvoorbeeld als volgt is: 
            ' wk1236789
            ' wk1368
            ' en ga zo maar door!

            LBOX_Weken.Items.Clear()

            Dim i As Integer
            Dim lengteOutput As Integer
            Dim nulTeken As Boolean = False
            Dim output As String = ""

            i = 0
            For Each character In input
                i = i + 1
                LBOX_Weken.Items.Add(character)
                If character = "0" Then
                    nulTeken = True
                End If
            Next

            If nulTeken = True Then
                ' Verwijder de karakter 0, welke zich op de positie i-1 bevind
                ' vervolgens de karakter 1 verwijderen welke zich op de positie i -2 bevind
                ' ten slotte op de positie i-2 de karakter 10 plaatsen
                LBOX_Weken.Items.RemoveAt(i - 1)
                LBOX_Weken.Items.RemoveAt(i - 2)
                LBOX_Weken.Items.Insert(i - 2, "10")
            End If

            For n = 0 To LBOX_Weken.Items.Count - 1
                output = output + CStr(LBOX_Weken.Items(n)) & ","

            Next

            ' Bepalen hoe groot de lengte van de variabel output is
            ' om hiermee de positie van de laatste comma te kunnen bepalen
            ' zodat deze ook verwijderd kan worden
            lengteOutput = output.Length
            output = output.Remove(lengteOutput - 1, 1)

        Else
            ' Wanneer er wel min-teken gevonden is dan gaan we ervan uit dat de weekformat
            ' bijvoorbeeld als volgt is:
            ' wk2-46-8
            ' wk1-478
            ' wk1-810
            ' wk13-10
            ' wk1-10
            ' wk13-8
            ' wk1-46-8
            ' wk1-57-10

            If input.Substring(1, 1) <> "-" Then
                ' Controle of de min-teken op de 1e positie staat
                ' Zodra dat niet het geval is dan bestaat het eerste blok uit 
                ' 1 cijfer dat op de positie input.substring(0,1) (de nulde positie) staat
                eersteBlok = input.Substring(0, 1)
            Else
                If input.Length = 3 Then
                    If input.Substring(1, 1) = "-" Then
                        eersteBlok = input.Substring(0, posTeken1 + 2)
                    End If
                Else
                    If input.Substring(1, 1) = "-" And input.Substring(posTeken1 + 2, 1) = "0" Then
                        eersteBlok = input.Substring(0, posTeken1 + 3)
                    Else

                        If input.Substring(posTeken1 + 2, 1) = "0" Then
                            eersteBlok = input.Substring(0, posTeken1 + 3)
                        Else
                            eersteBlok = input.Substring(0, posTeken1 + 2)
                        End If
                    End If
                End If

            End If

            lengteBlok1 = eersteBlok.Length

            ' Bepalen of er een 2e blok periode aanwezig is d.m.v. te zoeken op de min teken
            If input.IndexOf("-", lengteBlok1) <> -1 Then
                posTeken2 = input.IndexOf("-", lengteBlok1)
            End If

            tweedeblok = input.Substring(lengteBlok1, input.Length - lengteBlok1)

            'MessageBox.Show("1e blok: " & eersteBlok & NewLine _
            ' & "2e blok: " & tweedeblok)

            fillLboxWeken(eersteBlok, tweedeblok)
        End If
        ' We returnen niets naar het aanroepend programmacode
        ' indien gewenst kan er nog een status bericht geretourneerd worden
        Return Nothing
    End Function

    Private Function seperateKlassen(ByVal inputKlassenStr As String) As String
        Dim outputKlassenStr As String = ""
        Dim inputKlassenArr() As String
        Dim inputKlassenTeller As Integer

        ' Vul de array inputKlassenArr met de klassen. Hiervoor zoeken we elke klas op basis van de comma
        inputKlassenArr = Split(inputKlassenStr, ",")

        inputKlassenTeller = 0
        For n = 0 To UBound(inputKlassenArr)
            ' Teller om na te gaan hoeveel klassen er op de regel zijn geplaatst in het UNTIS bestand
            inputKlassenTeller = inputKlassenTeller + 1
            ' De gegevens die in de array inputKlassenArr is geplaatst trimmen op eventuele spaties
            inputKlassenArr(n) = Trim(inputKlassenArr(n))

            If inputKlassenTeller = 1 Then
                ' Wanneer de teller 1 is dan 1 XML-tag klas aanmaken
                outputKlassenStr = "<klas>" & inputKlassenArr(n) & "</klas>"
            ElseIf inputKlassenTeller > 1 Then
                ' Wanneer de teller groter is dan 1 dan voor elke klas een aparte XML-tag klas aanmaken op een aparte regel!
                outputKlassenStr = outputKlassenStr & NewLine + "<klas>" & inputKlassenArr(n) & "</klas>"
            ElseIf inputKlassenTeller = 0 Then
                ' Wanneer de teller 0 is dan is er geen klas gevonden, we returnen een lege string
                outputKlassenStr = ""
            End If
        Next

        ' Debug messageboxen
        'MessageBox.Show(CStr(inputKlassenTeller))
        'MessageBox.Show(CStr(outputKlassenStr))

        Return outputKlassenStr
    End Function

    Private Function fillLboxWeken(ByVal eersteBlok As String, ByVal tweedeBlok As String) As String
        Dim input = eersteBlok
        Dim beginWeek As Integer
        Dim eindWeek As Integer

        LBOX_Weken.Items.Clear()

        beginWeek = CInt(input.Substring(0, 1))

        If input.Length = 1 Then ' Zodra het eerste blok maar uit 1 week bestaat
            beginWeek = CInt(input.Substring(0, 1))
            eindWeek = CInt(input.Substring(0, 1))
        Else
            ' Zodra het eerste blok niet uit 1 week bestaat eerst controleren
            ' of het laatste week, week 10 is (check op cijfer 0)
            If input.IndexOf("0") <> -1 Then ' Zodra de 0 gevonden is 
                eindWeek = CInt(input.Substring(2, 2))
            Else
                ' Zodra het laatste week, niet week 10 is dan het cijfer pakken
                ' na de min teken.
                eindWeek = CInt(input.Substring(2, 1))
            End If

        End If

        For n = beginWeek To eindWeek
            LBOX_Weken.Items.Add(n)
        Next

        If tweedeBlok.Length <> 0 Then
            input = tweedeBlok

            beginWeek = CInt(input.Substring(0, 1))

            If input.Length = 1 Then
                beginWeek = CInt(input.Substring(0, 1))
                eindWeek = CInt(input.Substring(0, 1))
            ElseIf input.Length = 2 And input.Substring(1, 1) <> "0" Then
                beginWeek = CInt(input.Substring(0, 1))
                eindWeek = CInt(input.Substring(1, 1))
            ElseIf input.Length = 2 And input.Substring(1, 1) = "0" Then
                beginWeek = CInt(input.Substring(0, 2))
                eindWeek = CInt(input.Substring(0, 2))
            Else

                If input.IndexOf("0") <> -1 Then
                    ' Zodra de week als volgt is opgebouwd wk13-10 dan wordt
                    ' eindWeek via de substring functie bepaald

                    '             12
                    'index      0123
                    'waarde     3-10
                    eindWeek = CInt(input.Substring(2, 2))
                Else
                    eindWeek = CInt(input.Substring(2, 1))
                End If

            End If
        Else

        End If

        If tweedeBlok.Length <> 0 Then
            For n = beginWeek To eindWeek
                LBOX_Weken.Items.Add(n)
            Next
        End If

        ' We returnen niets naar het aanroepend programmacode
        ' indien gewenst kan er nog een status bericht geretourneerd worden
        Return Nothing
    End Function

    Private Function makeRoosterXML(ByVal XMLOutput As String) As String
        Dim FILE_NAME As String = "AB2_Rooster.xml"
        Dim emptyString As String = ""
        If System.IO.File.Exists(FILE_NAME) = True Then
            ' Mocht rooster.xml nog bestaan dan gooien we deze eerst weg
            System.IO.File.Delete(FILE_NAME)
            ' Nu maken we een nieuwe rooster.xml bestand aan, dat geheel leeg is
            My.Computer.FileSystem.WriteAllText("AB2_Rooster.xml", emptyString.ToString, False)
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
            ' Schrijf nu alle string uit de variabele XMLOutput weg naar het AB2_rooster.xml bestand
            objWriter.Write(XMLOutput)
            objWriter.Close()
        Else
            ' Maak een nieuwe XML-bestand aan zonder enige inhoud
            My.Computer.FileSystem.WriteAllText("AB2_Rooster.xml", emptyString.ToString, False)
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME)
            objWriter.Write(XMLOutput)
            objWriter.Close()
        End If
        Return Nothing
    End Function

    Private Function makeKlassenOngefilterdXML(ByVal klas As String) As String
        Dim mijnKlas = XDocument.Load("AB2_Rooster.xml")
        Dim teZoekenKlas As String
        teZoekenKlas = klas
        Dim mijnEigenKlas = <mijnKlas>
                                <%= From klassen In mijnKlas...<vak> _
                                    Where klassen.<klas>.Value Like teZoekenKlas _
                                    Select klassen %>
                            </mijnKlas>

        ' Het XML-bestand mijnKlasOngefilterd.xml bevat alle geselecteerde data
        ' Hiermee bedoelen we ook de nodes die bepaalde essentiële elementen niet hebben
        ' We doen dit zodat we op het einde het Ongefilterde XML-bestand gaan vergelijken
        ' met het Gefilterde XML-bestand in die zin dat we het verschil in aantallen nodes
        ' gaan berekenen
        My.Computer.FileSystem.WriteAllText("mijnKlasOngefilterd.xml", mijnEigenKlas.ToString, False)

        ' Process.start laat het XML-bestand zien via de browser
        'Process.Start("mijnKlas.xml")

        Return Nothing
    End Function

    Private Function makeVakkenOngefilterdXML(ByVal vak As String) As String
        Dim mijnVak = XDocument.Load("AB2_rooster.xml")

        Dim mijnEigenVak = <mijnVak>
                               <%= From vakken In mijnVak...<vak> _
                                   Where vakken.<vaknaam>.Value Like vak _
                                   Select vakken %>
                           </mijnVak>

        ' Het XML-bestand mijnVakOngefilterd.xml bevat alle geselecteerde data
        ' Hiermee bedoelen we ook de nodes die bepaalde essentiële elementen niet hebben
        ' We doen dit zodat we op het einde het Ongefilterde XML-bestand gaan vergelijken
        ' met het Gefilterde XML-bestand in die zin dat we het verschil in aantallen nodes
        ' gaan berekenen
        My.Computer.FileSystem.WriteAllText("mijnVakOngefilterd.xml", mijnEigenVak.ToString, False)

        ' Process.start laat het XML-bestand zien via de browser
        'Process.Start("mijnVakOngefilterd.xml")

        Return Nothing
    End Function

    Private Function makeKlassenGefilterdXML(ByVal klas As String) As String
        Dim mijnKlas = XDocument.Load("AB2_rooster.xml")
        Dim mijnEigenKlas = <mijnKlas>
                                <%= From vakken In mijnKlas...<vak> _
                                    Where vakken.<klas>.Value Like klas _
                                    And vakken.<leraar>.Value <> Nothing _
                                    And vakken.<lokaal>.Value <> Nothing _
                                    And vakken.<dagenuur>.Value <> Nothing _
                                    Select vakken %>
                            </mijnKlas>

        My.Computer.FileSystem.WriteAllText("mijnKlasGefilterd.xml", mijnEigenKlas.ToString, False)
        'Process.Start("mijnKlasGefilterd.xml")

        If mijnEigenKlas.ToString.StartsWith("<mijnKlas />") Then
            XMLFileKlassenEmpty = True
        End If

        Return Nothing
    End Function

    Private Function makeVakkenGefilterdXML(ByVal vak As String) As String
        Dim mijnVak = XDocument.Load("AB2_rooster.xml")

        Dim teZoekenVak As String = vak

        Dim mijnEigenVak = <mijnVak>
                               <%= From vakken In mijnVak...<vak> _
                                   Where vakken.<vaknaam>.Value Like teZoekenVak _
                                   And vakken.<klas>.Value <> Nothing _
                                   And vakken.<leraar>.Value <> Nothing _
                                   And vakken.<lokaal>.Value <> Nothing _
                                   And vakken.<dagenuur>.Value <> Nothing _
                                   Select vakken %>
                           </mijnVak>

        My.Computer.FileSystem.WriteAllText("mijnVakGefilterd.xml", mijnEigenVak.ToString, False)
        'Process.Start("mijnVakGefilterd.xml")

        If mijnEigenVak.ToString.StartsWith("<mijnVak />") Then
            XMLFileVakkenEmpty = True
        End If
        Return Nothing
    End Function

    Private Sub BTN_Exporteer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_Exporteer.Click
        Dim bericht As String
        Dim aantalLessen As Integer = aantalKlassenGefilterd + aantalVakkenGefilterd
        If XMLFileKlassenEmpty = False Then
            ' We exporteren de klassen alleen als er iets te exporteren valt anders doen we niets
            exportKlassen()
        End If

        If XMLFileVakkenEmpty = False Then
            ' We exporteren de vakken alleen als er iets te exporteren valt anders doen we niets
            exportVakken()
        End If
        BTN_Exporteer.Enabled = False

        If aantalKlassenGefilterd = 0 And aantalVakkenGefilterd = 0 Then
            bericht = "Er zijn geen roostergegevens in uw MS Outlook agenda geplaatst!" & NewLine _
            & "Reden: Het UNTIS bestand bevat onvolledige roostergegevens."
            MessageBox.Show(bericht, "Informatie", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            bericht = "Het rooster is met succes in uw MS Outlook agenda geplaatst!" & NewLine & _
            "Er zijn " & aantalLessen & " gegevens geëxporteerd."

            MessageBox.Show(bericht, "Informatie", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If


        ' De methode writeLogFile maakt een logbestand aan waarin de bewerkingen
        ' die zijn gelukt en mislukt worden opgeslagen
        writeLogFile()

        My.Computer.FileSystem.DeleteFile("AB2_rooster.xml")
        My.Computer.FileSystem.DeleteFile("mijnKlasGefilterd.xml")
        My.Computer.FileSystem.DeleteFile("mijnKlasOnGefilterd.xml")
        My.Computer.FileSystem.DeleteFile("mijnVakGefilterd.xml")
        My.Computer.FileSystem.DeleteFile("mijnVakOnGefilterd.xml")


        closeFile()
    End Sub

    Private Function exportKlassen() As String
        Dim mijnKlas As New XmlDocument
        mijnKlas.Load("mijnKlasGefilterd.xml") 'XML bestand inladen
        Dim getKlas As String = String.Format("//vak[klas='{0}']", gekozenKlas)

        'Strings om aan de xml-nodes te koppelen
        Dim week As String = ""
        Dim vaknaam As String = ""
        Dim leraar As String = ""
        Dim lokaal As String = ""
        Dim dagenuur As String = ""
        Dim bericht As String = ""

        'Arrays
        Dim arrWeek(1000) As String 'Hierin worden de weken opgeslagen
        Dim arrDagenuur(13) As String 'Hierin worden de xml-node dagenuur opgeslagen
        Dim arrDagen(1000) As Integer 'Hierin worden de dagen opgeslagen van een bepaald vak
        Dim arrUren(1000) As Integer 'Hierin worden de uren opgeslagen van een bepaald vak
        Dim datumToOutlook(1) As Date 'Hierin worden de datums opgeslagen die naar outlook gestuurd worden

        ' Voer voor elk gevonden XML-knooppunt (Node) de onderstaande opdrachten uit  
        For Each node As XmlNode In mijnKlas.SelectNodes(getKlas)

            'Hier worden de arrays gewist zodat er geen verkeerde informatie in de agenda kan komen

            Array.Clear(arrWeek, 0, UBound(arrWeek) + 1)
            Array.Clear(arrDagen, 0, UBound(arrDagen) + 1)
            Array.Clear(arrUren, 0, UBound(arrUren) + 1)

            'Uitlezen XML-node, hierin word de week aangegeven waarin lessen plaats vinden

            For Each objWeek As XmlNode In node.SelectNodes("week")
                week = objWeek.InnerText
            Next

            'Opsplitsen van de weken en elke week in een vak in het array stoppen

            arrWeek = Split(week, ",")

            'Aantal plaatsen bereken die bezet worden in het array arrWeek

            Dim aantalPlaatsenArrWeek As Integer = 0

            For n = 0 To UBound(arrWeek)
                If arrWeek(n) <> Nothing Then
                    aantalPlaatsenArrWeek = aantalPlaatsenArrWeek + 1 ' Voor elk gevonden element dat een waarde bevat dus <> nothing (ongelijk aan leeg)
                End If

            Next

            'XML node vaknaam wordt uitgelezen, hierin wordt het vak uitgelezen en aan bijvoorbeeld weken, leraar, dag en uur gekoppeld

            For Each objVakNaam As XmlNode In node.SelectNodes("vaknaam")
                vaknaam = objVakNaam.InnerText
            Next

            'XML node leraar wordt uitgelezen, deze wordt gekoppeld aan het vak

            For Each objLeraar As XmlNode In node.SelectNodes("leraar")
                leraar = objLeraar.InnerText
            Next

            'XML node lokaal wordt uitgelezen en aan vak gekoppeld

            For Each objLokaal As XmlNode In node.SelectNodes("lokaal")
                lokaal = objLokaal.InnerText
            Next

            'XML node dagenuur word uitgelezen en aan vak gekoppeld, daarnaast word dag en uur gesplitst van elkaar en deze worden in 2 apparte arrays geplaatst

            Dim iDagenuur As Integer = 0
            Dim index As Integer = 0

            For Each objDagenuur As XmlNode In node.SelectNodes("dagenuur")
                iDagenuur = iDagenuur + 1
                dagenuur = objDagenuur.InnerText
                arrDagenuur(iDagenuur) = dagenuur

                'Haalt de dagen uit de string <dagenuur> en zet deze in een array
                Dim tempDagenUur1, tempDagenUur2 As String
                tempDagenUur1 = dagenuur.Substring(0, 1)
                arrDagen(index) = CInt(tempDagenUur1)
                tempDagenUur2 = dagenuur.Substring(2, 1)
                arrUren(index) = CInt(tempDagenUur2)
                'MessageBox.Show("Index " & index & " Dag " & arrDagen(index) & " " & "Uren " & arrUren(index))
                index = index + 1
            Next

            'Bepaal de aantal plaatsen in array arrDagen
            Dim aantalPlaatsenArrDagen As Integer = 0

            For n = 0 To UBound(arrDagen)

                If arrDagen(n) <> Nothing Then
                    aantalPlaatsenArrDagen = aantalPlaatsenArrDagen + 1 ' Voor elk gevonden element dat een waarde bevat dus <> nothing (ongelijk aan leeg)
                End If
            Next

            'Zet begindatum van lesrooster in variabele

            Dim beginDatumLesrooster As Date = beginDatumLesroosterGlobal(0)

            'Begin van de loop waarin de gegevens met elkaar gekoppeld worden verstuurd worden naar Outlook

            For outlookLoop = 0 To aantalPlaatsenArrWeek - 1 'Doorloopt de aantal weken waarin een vak wordt gegeven
                For OutlookLoop2 = 0 To aantalPlaatsenArrDagen - 1 'Doorloopt de aantal keren dat een vak per week gegeven wordt
                    Dim weekDatum, uren As Date

                    'Creeer outlook applicatie
                    Dim oApp As Outlook.Application = New Outlook.Application()

                    'Creeer afspraakitem
                    Dim oAppt As Outlook.AppointmentItem = CType(CType(oApp.CreateItem(Outlook.OlItemType.olAppointmentItem), AppointmentItem), Outlook.AppointmentItem)

                    'Haal dag uit <dagenuur> en geef deze naar de loop door waar de datum voor alle weken wordt berekend
                    Dim welkeDag As Integer = arrDagen(OutlookLoop2)

                    'Haal lesuur uit <dagenuur> en geef deze door in een loop

                    Dim LesroosterUren As Integer = arrUren(OutlookLoop2)

                    'De tijd waarin de eerste les begint

                    Dim beginUur As Date = CDate("08:45:00 AM")

                    'Omzetten van lesuren naar tijd

                    Select Case LesroosterUren
                        Case 1
                            uren = beginUur
                        Case 2
                            uren = CDate(DateAdd(DateInterval.Minute, 50, beginUur).ToLongTimeString())
                        Case 3
                            uren = CDate(DateAdd(DateInterval.Minute, 120, beginUur).ToLongTimeString())
                        Case 4
                            uren = CDate(DateAdd(DateInterval.Minute, 170, beginUur).ToLongTimeString())
                        Case 5
                            uren = CDate(DateAdd(DateInterval.Minute, 220, beginUur).ToLongTimeString())
                        Case 6
                            uren = CDate(DateAdd(DateInterval.Minute, 270, beginUur).ToLongTimeString())
                        Case 7
                            uren = CDate(DateAdd(DateInterval.Minute, 320, beginUur).ToLongTimeString())
                        Case 8
                            uren = CDate(DateAdd(DateInterval.Minute, 390, beginUur).ToLongTimeString())
                        Case 9
                            uren = CDate(DateAdd(DateInterval.Minute, 440, beginUur).ToLongTimeString())
                        Case 10
                            uren = CDate(DateAdd(DateInterval.Minute, 490, beginUur).ToLongTimeString())
                        Case 11
                            uren = CDate(DateAdd(DateInterval.Minute, 555, beginUur).ToLongTimeString())
                        Case 12
                            uren = CDate(DateAdd(DateInterval.Minute, 605, beginUur).ToLongTimeString())
                        Case 13
                            uren = CDate(DateAdd(DateInterval.Minute, 675, beginUur).ToLongTimeString())
                        Case 14
                            uren = CDate(DateAdd(DateInterval.Minute, 725, beginUur).ToLongTimeString())
                    End Select

                    'Bepaal grootte array van begindatum vakanties

                    Dim aantalVakantieBeginDatumGlobal As Integer = 0

                    For n = 0 To UBound(vakantieBeginDatumGlobal)

                        If vakantieBeginDatumGlobal(n) <> Nothing Then
                            aantalVakantieBeginDatumGlobal = aantalVakantieBeginDatumGlobal + 1 ' Voor elk gevonden element dat een waarde bevat dus <> nothing (ongelijk aan leeg)
                        End If
                    Next

                    weekDatum = DateAdd(DateInterval.Day, welkeDag - 1 + ((CDbl(arrWeek(outlookLoop)) - 1) * 7), beginDatumLesrooster)

                    'Stel de standaard outlook variabelen in

                    Dim onderwerp As String = "Klas: " & gekozenKlas & " " & "Vak: " & vaknaam & " "
                    Dim afspraakBody As String = "Docent: " & leraar
                    Dim locatie As String = "Locatie: " & lokaal

                    'In deze loop wordt er gecontroleerd of er een vakantiedag of week is

                    For vakantieloop = 0 To aantalVakantieBeginDatumGlobal - 1

                        'Bepaal verschil einddatum met begindatum

                        Dim beginDatum As Date = vakantieBeginDatumGlobal(vakantieloop)
                        Dim eindDatum As Date = vakantieEindDatumGlobal(vakantieloop)
                        Dim verschil As Integer = CInt(DateDiff(DateInterval.Day, beginDatum, eindDatum))
                        Dim volgendeVakantieDatum, volgendeVrijeDag As Date

                        If verschil > 3 Then
                            volgendeVakantieDatum = beginDatum
                        Else
                            volgendeVrijeDag = beginDatum
                        End If


                        Dim vakantieWeekDatum As Date
                        Dim vakantieloop2 As Integer = 0
                        For vakantieloop2 = 0 To verschil - 1
                            If weekDatum = DateAdd(DateInterval.Day, vakantieloop2, beginDatum) Then
                                vakantieWeekDatum = DateAdd(DateInterval.Day, vakantieloop2, beginDatum)
                                'Creeer outlook applicatie
                                Dim oApp1 As Outlook.Application = New Outlook.Application()

                                'Creeer afspraakitem
                                Dim oAppt1 As Outlook.AppointmentItem = CType(CType(oApp.CreateItem(Outlook.OlItemType.olAppointmentItem), AppointmentItem), Outlook.AppointmentItem)

                                'Outlookproperties
                                oAppt1.Subject = "Vrij"
                                oAppt1.Body = "Vrij"
                                oAppt1.Location = "Vrij"

                                oAppt1.Start = CDate(Convert.ToDateTime(vakantieWeekDatum) & " " & CDate(uren))
                                oAppt1.Duration = 50

                                oAppt1.ReminderSet = outlookReminder
                                oAppt1.ReminderMinutesBeforeStart = 1
                                oAppt1.BusyStatus = Outlook.OlBusyStatus.olBusy
                                oAppt1.IsOnlineMeeting = False

                                'Opslaan van afspraak
                                oAppt1.Save()

                                'Schoonmaken
                                oApp1 = Nothing
                                oAppt1 = Nothing
                            End If
                        Next

                        'Controle van vakantieweek
                        Dim tempVakantieWeekDatum As Date
                        If weekDatum >= volgendeVakantieDatum Then
                            tempVakantieWeekDatum = weekDatum
                            weekDatum = DateAdd(DateInterval.Day, welkeDag - 1 + ((CDbl(arrWeek(outlookLoop)) - 1) * 7) + 7, beginDatumLesrooster)
                            datumToOutlook(0) = weekDatum
                        Else
                            weekDatum = DateAdd(DateInterval.Day, welkeDag - 1 + ((CDbl(arrWeek(outlookLoop)) - 1) * 7), beginDatumLesrooster)
                            datumToOutlook(0) = weekDatum
                        End If

                        'Controle van vrije dag

                        If weekDatum = volgendeVrijeDag Then
                            onderwerp = "Vrij"
                            afspraakBody = "Vrij"
                            locatie = "Vrij"
                        End If
                    Next

                    Dim finalToOutlook As Date
                    finalToOutlook = datumToOutlook(0)

                    'Outlookproperties
                    oAppt.Subject = onderwerp
                    oAppt.Body = afspraakBody
                    oAppt.Location = locatie

                    oAppt.Start = CDate(Convert.ToDateTime(finalToOutlook) & " " & CDate(uren))
                    oAppt.Duration = 50

                    oAppt.ReminderSet = outlookReminder
                    oAppt.ReminderMinutesBeforeStart = 1
                    oAppt.BusyStatus = Outlook.OlBusyStatus.olBusy
                    oAppt.IsOnlineMeeting = False

                    'Opslaan van afspraak
                    oAppt.Save()

                    'Schoonmaken
                    oApp = Nothing
                    oAppt = Nothing
                Next
            Next
        Next
        Return Nothing
    End Function

    Private Function exportVakken() As String
        Dim mijnVak As New XmlDocument
        mijnVak.Load("mijnVakGefilterd.xml") 'Inladen van xml
        Dim getVakNaam As String = String.Format("//vak[vaknaam='{0}']", gekozenVak)

        'Strings om aan de xml-nodes te koppelen
        Dim week As String = ""
        Dim vaknaam As String = ""
        Dim leraar As String = ""
        Dim lokaal As String = ""
        Dim dagenuur As String = ""
        Dim bericht As String = ""

        'Arrays
        Dim arrWeek(1000) As String 'Hierin worden de weken opgeslagen
        Dim arrDagenuur(13) As String 'Hierin worden de xml-node dagenuur opgeslagen
        Dim arrDagen(1000) As Integer 'Hierin worden de dagen opgeslagen van een bepaald vak
        Dim arrUren(1000) As Integer 'Hierin worden de uren opgeslagen van een bepaald vak
        Dim datumToOutlook(1) As Date 'Hierin worden de datums opgeslagen die naar outlook gestuurd worden

        ' Voer voor elk gevonden XML-knooppunt (Node) de onderstaande opdrachten uit  
        For Each node As XmlNode In mijnVak.SelectNodes(getVakNaam)

            'Hier worden de arrays gewist zodat er geen verkeerde informatie in de agenda kan komen

            Array.Clear(arrWeek, 0, UBound(arrWeek) + 1)
            Array.Clear(arrDagen, 0, UBound(arrDagen) + 1)
            Array.Clear(arrUren, 0, UBound(arrUren) + 1)

            'Uitlezen XML-node, hierin word de week aangegeven waarin lessen plaats vinden

            For Each objWeek As XmlNode In node.SelectNodes("week")
                week = objWeek.InnerText
            Next

            'Opsplitsen van de weken en elke week in een vak in het array stoppen

            arrWeek = Split(week, ",")

            'Aantal plaatsen bereken die bezet worden in het array arrWeek

            Dim aantalPlaatsenArrWeek As Integer = 0

            For n = 0 To UBound(arrWeek)
                If arrWeek(n) <> Nothing Then
                    aantalPlaatsenArrWeek = aantalPlaatsenArrWeek + 1 ' Voor elk gevonden element dat een waarde bevat dus <> nothing (ongelijk aan leeg)
                End If

            Next

            'XML node vaknaam wordt uitgelezen, hierin wordt het vak uitgelezen en aan bijvoorbeeld weken, leraar, dag en uur gekoppeld

            For Each objVakNaam As XmlNode In node.SelectNodes("vaknaam")
                vaknaam = objVakNaam.InnerText
            Next

            'XML node leraar wordt uitgelezen, deze wordt gekoppeld aan het vak

            For Each objLeraar As XmlNode In node.SelectNodes("leraar")
                leraar = objLeraar.InnerText
            Next

            'XML node lokaal wordt uitgelezen en aan vak gekoppeld

            For Each objLokaal As XmlNode In node.SelectNodes("lokaal")
                lokaal = objLokaal.InnerText
            Next

            'XML node dagenuur word uitgelezen en aan vak gekoppeld, daarnaast word dag en uur gesplitst van elkaar en deze worden in 2 apparte arrays geplaatst

            Dim iDagenuur As Integer = 0
            Dim index As Integer = 0

            For Each objDagenuur As XmlNode In node.SelectNodes("dagenuur")
                iDagenuur = iDagenuur + 1
                dagenuur = objDagenuur.InnerText
                arrDagenuur(iDagenuur) = dagenuur

                'Haalt de dagen uit de string <dagenuur> en zet deze in een array
                Dim tempDagenUur1, tempDagenUur2 As String
                tempDagenUur1 = dagenuur.Substring(0, 1)
                arrDagen(index) = CInt(tempDagenUur1)
                tempDagenUur2 = dagenuur.Substring(2, 1)
                arrUren(index) = CInt(tempDagenUur2)
                'MessageBox.Show("Index " & index & " Dag " & arrDagen(index) & " " & "Uren " & arrUren(index))
                index = index + 1
            Next

            'Bepaal de aantal plaatsen in array arrDagen
            Dim aantalPlaatsenArrDagen As Integer = 0

            For n = 0 To UBound(arrDagen)

                If arrDagen(n) <> Nothing Then
                    aantalPlaatsenArrDagen = aantalPlaatsenArrDagen + 1 ' Voor elk gevonden element dat een waarde bevat dus <> nothing (ongelijk aan leeg)
                End If
            Next

            'Zet begindatum van lesrooster in variabele

            Dim beginDatumLesrooster As Date = beginDatumLesroosterGlobal(0)

            'Begin van de loop waarin de gegevens met elkaar gekoppeld worden verstuurd worden naar Outlook

            For outlookLoop = 0 To aantalPlaatsenArrWeek - 1 'Doorloopt de aantal weken waarin een vak wordt gegeven
                For OutlookLoop2 = 0 To aantalPlaatsenArrDagen - 1 'Doorloopt de aantal keren dat een vak per week gegeven wordt
                    Dim weekDatum, uren As Date

                    'Creeer outlook applicatie
                    Dim oApp As Outlook.Application = New Outlook.Application()

                    'Creeer afspraakitem
                    Dim oAppt As Outlook.AppointmentItem = CType(CType(oApp.CreateItem(Outlook.OlItemType.olAppointmentItem), AppointmentItem), Outlook.AppointmentItem)

                    'Haal dag uit <dagenuur> en geef deze naar de loop door waar de datum voor alle weken wordt berekend
                    Dim welkeDag As Integer = arrDagen(OutlookLoop2)

                    'Haal lesuur uit <dagenuur> en geef deze door in een loop

                    Dim LesroosterUren As Integer = arrUren(OutlookLoop2)

                    'De tijd waarin de eerste les begint

                    Dim beginUur As Date = CDate("08:45:00 AM")

                    'Omzetten van lesuren naar tijd

                    Select Case LesroosterUren
                        Case 1
                            uren = beginUur
                        Case 2
                            uren = CDate(DateAdd(DateInterval.Minute, 50, beginUur).ToLongTimeString())
                        Case 3
                            uren = CDate(DateAdd(DateInterval.Minute, 120, beginUur).ToLongTimeString())
                        Case 4
                            uren = CDate(DateAdd(DateInterval.Minute, 170, beginUur).ToLongTimeString())
                        Case 5
                            uren = CDate(DateAdd(DateInterval.Minute, 220, beginUur).ToLongTimeString())
                        Case 6
                            uren = CDate(DateAdd(DateInterval.Minute, 270, beginUur).ToLongTimeString())
                        Case 7
                            uren = CDate(DateAdd(DateInterval.Minute, 320, beginUur).ToLongTimeString())
                        Case 8
                            uren = CDate(DateAdd(DateInterval.Minute, 390, beginUur).ToLongTimeString())
                        Case 9
                            uren = CDate(DateAdd(DateInterval.Minute, 440, beginUur).ToLongTimeString())
                        Case 10
                            uren = CDate(DateAdd(DateInterval.Minute, 490, beginUur).ToLongTimeString())
                        Case 11
                            uren = CDate(DateAdd(DateInterval.Minute, 555, beginUur).ToLongTimeString())
                        Case 12
                            uren = CDate(DateAdd(DateInterval.Minute, 605, beginUur).ToLongTimeString())
                        Case 13
                            uren = CDate(DateAdd(DateInterval.Minute, 675, beginUur).ToLongTimeString())
                        Case 14
                            uren = CDate(DateAdd(DateInterval.Minute, 725, beginUur).ToLongTimeString())
                    End Select

                    'Bepaal grootte array van begindatum vakanties

                    Dim aantalVakantieBeginDatumGlobal As Integer = 0

                    For n = 0 To UBound(vakantieBeginDatumGlobal)

                        If vakantieBeginDatumGlobal(n) <> Nothing Then
                            aantalVakantieBeginDatumGlobal = aantalVakantieBeginDatumGlobal + 1 ' Voor elk gevonden element dat een waarde bevat dus <> nothing (ongelijk aan leeg)
                        End If
                    Next

                    weekDatum = DateAdd(DateInterval.Day, welkeDag - 1 + ((CDbl(arrWeek(outlookLoop)) - 1) * 7), beginDatumLesrooster)

                    'Stel de standaard outlook variabelen in

                    Dim onderwerp As String = "Klas: " & gekozenVak & " " & "Vak: " & vaknaam & " "
                    Dim afspraakBody As String = "Docent: " & leraar
                    Dim locatie As String = "Locatie: " & lokaal

                    'In deze loop wordt er gecontroleerd of er een vakantiedag of week is

                    For vakantieloop = 0 To aantalVakantieBeginDatumGlobal - 1

                        'Bepaal verschil einddatum met begindatum

                        Dim beginDatum As Date = vakantieBeginDatumGlobal(vakantieloop)
                        Dim eindDatum As Date = vakantieEindDatumGlobal(vakantieloop)
                        Dim verschil As Integer = CInt(DateDiff(DateInterval.Day, beginDatum, eindDatum))
                        Dim volgendeVakantieDatum, volgendeVrijeDag As Date

                        If verschil > 3 Then
                            volgendeVakantieDatum = beginDatum
                        Else
                            volgendeVrijeDag = beginDatum
                        End If


                        Dim vakantieWeekDatum As Date
                        Dim vakantieloop2 As Integer = 0
                        For vakantieloop2 = 0 To verschil - 1
                            If weekDatum = DateAdd(DateInterval.Day, vakantieloop2, beginDatum) Then
                                vakantieWeekDatum = DateAdd(DateInterval.Day, vakantieloop2, beginDatum)
                                'Creeer outlook applicatie
                                Dim oApp1 As Outlook.Application = New Outlook.Application()

                                'Creeer afspraakitem
                                Dim oAppt1 As Outlook.AppointmentItem = CType(CType(oApp.CreateItem(Outlook.OlItemType.olAppointmentItem), AppointmentItem), Outlook.AppointmentItem)

                                'Outlookproperties
                                oAppt1.Subject = "Vrij"
                                oAppt1.Body = "Vrij"
                                oAppt1.Location = "Vrij"

                                oAppt1.Start = CDate(Convert.ToDateTime(vakantieWeekDatum) & " " & CDate(uren))
                                oAppt1.Duration = 50

                                oAppt1.ReminderSet = outlookReminder
                                oAppt1.ReminderMinutesBeforeStart = 1
                                oAppt1.BusyStatus = Outlook.OlBusyStatus.olBusy
                                oAppt1.IsOnlineMeeting = False

                                'Opslaan van afspraak
                                oAppt1.Save()

                                'Schoonmaken
                                oApp1 = Nothing
                                oAppt1 = Nothing
                            End If
                        Next

                        'Controle van vakantieweek
                        Dim tempVakantieWeekDatum As Date
                        If weekDatum >= volgendeVakantieDatum Then
                            tempVakantieWeekDatum = weekDatum
                            weekDatum = DateAdd(DateInterval.Day, welkeDag - 1 + ((CDbl(arrWeek(outlookLoop)) - 1) * 7) + 7, beginDatumLesrooster)
                            datumToOutlook(0) = weekDatum
                        Else
                            weekDatum = DateAdd(DateInterval.Day, welkeDag - 1 + ((CDbl(arrWeek(outlookLoop)) - 1) * 7), beginDatumLesrooster)
                            datumToOutlook(0) = weekDatum
                        End If

                        'Controle van vrije dag

                        If weekDatum = volgendeVrijeDag Then
                            onderwerp = "Vrij"
                            afspraakBody = "Vrij"
                            locatie = "Vrij"
                        End If
                    Next

                    Dim finalToOutlook As Date
                    finalToOutlook = datumToOutlook(0)

                    'Outlookproperties
                    oAppt.Subject = onderwerp
                    oAppt.Body = afspraakBody
                    oAppt.Location = locatie

                    oAppt.Start = CDate(Convert.ToDateTime(finalToOutlook) & " " & CDate(uren))
                    oAppt.Duration = 50

                    oAppt.ReminderSet = outlookReminder
                    oAppt.ReminderMinutesBeforeStart = 1
                    oAppt.BusyStatus = Outlook.OlBusyStatus.olBusy
                    oAppt.IsOnlineMeeting = False

                    'Opslaan van afspraak
                    oAppt.Save()

                    'Schoonmaken
                    oApp = Nothing
                    oAppt = Nothing
                Next
            Next
        Next

        Return Nothing
    End Function

    Private Sub getBeginDatumLesrooster()
        'In deze sub worden de begindatum en einddatum van de lesrooster uit de untisfile gehaald en naar een datum berekend
        Dim datumRegel As String
        Dim datumArray() As String
        Dim beginDatum As Date
        Dim eindDatum As Date
        Dim tempBeginDatum, tempBeginDatum2, tempBeginDatum3, tempBeginDatum4, tempBeginDatum5 As String
        Dim tempEindDatum, tempEindDatum2, tempEindDatum3, tempEindDatum4, tempEindDatum5 As String

        For i = 0 To 100
            If TBOX_Invoer.Lines(i).StartsWith("AA02 ") Then
                datumRegel = TBOX_Invoer.Lines(i)
                datumArray = Split(datumRegel, " ")
                tempBeginDatum = datumArray(1)
                tempEindDatum = datumArray(2)

                tempBeginDatum2 = tempBeginDatum.Substring(0, 4)
                tempBeginDatum3 = tempBeginDatum.Substring(4, 2)
                tempBeginDatum4 = tempBeginDatum.Substring(6, 2)
                tempBeginDatum5 = tempBeginDatum2 & "-" & tempBeginDatum3 & "-" & tempBeginDatum4

                tempEindDatum2 = tempEindDatum.Substring(0, 4)
                tempEindDatum3 = tempEindDatum.Substring(4, 2)
                tempEindDatum4 = tempEindDatum.Substring(6, 2)
                tempEindDatum5 = tempEindDatum2 & "-" & tempEindDatum3 & "-" & tempEindDatum4

                beginDatum = DateValue(tempBeginDatum5)
                eindDatum = DateValue(tempEindDatum5)

                beginDatumLesroosterGlobal(0) = beginDatum
                eindDatumLesroosterGlobal(0) = eindDatum
            End If
        Next
    End Sub

    Private Sub getVakantieWeken()
        'In deze sub worden de begindatum en einddatum van de vakanties uit de untisfile gehaald en naar een datum berekend
        Dim vakantiedatum() As String
        Dim tempBeginDatum, tempBeginDatum2, tempBeginDatum3, tempBeginDatum4, tempBeginDatum5 As String
        Dim tempEindDatum, tempEindDatum2, tempEindDatum3, tempEindDatum4, tempEindDatum5 As String
        Dim beginDatum As Date
        Dim eindDatum As Date
        Dim i As Integer = 0


        For Each line In TBOX_Invoer.Lines

            If line.IndexOf("FE0") <> -1 Then
                i = i + 1
                vakantiedatum = Split(line, ",")
                tempBeginDatum = vakantiedatum(UBound(vakantiedatum) - 4)
                tempEindDatum = vakantiedatum(UBound(vakantiedatum) - 3)

                tempBeginDatum2 = tempBeginDatum.Substring(0, 4)
                tempBeginDatum3 = tempBeginDatum.Substring(4, 2)
                tempBeginDatum4 = tempBeginDatum.Substring(6, 2)
                tempBeginDatum5 = tempBeginDatum2 & "-" & tempBeginDatum3 & "-" & tempBeginDatum4

                tempEindDatum2 = tempEindDatum.Substring(0, 4)
                tempEindDatum3 = tempEindDatum.Substring(4, 2)
                tempEindDatum4 = tempEindDatum.Substring(6, 2)
                tempEindDatum5 = tempEindDatum2 & "-" & tempEindDatum3 & "-" & tempEindDatum4

                beginDatum = DateValue(tempBeginDatum5)
                eindDatum = DateValue(tempEindDatum5)
                vakantieBeginDatumGlobal(i - 1) = beginDatum
                vakantieEindDatumGlobal(i - 1) = eindDatum
            End If
        Next
    End Sub



    Private Function readXMLFiles(ByVal fileName As String, ByVal tbox As String) As String
        Dim inhoud As String

        Dim objStreamReader As StreamReader
        objStreamReader = File.OpenText(fileName)

        ' Lees de hele bestand naar de string inhoud
        inhoud = objStreamReader.ReadToEnd()

        ' Vul de textbox met de variabele contents
        Select Case tbox
            Case "tboxMijnKlasOngefilterd"
                TBOX_MijnKlasOngefilterd.Text = inhoud
            Case "tboxMijnKlasGefilterd"
                TBOX_MijnKlasGefilterd.Text = inhoud
            Case "tboxMijnVakOngefilterd"
                TBOX_MijnVakOngefilterd.Text = inhoud
            Case "tboxMijnVakGefilterd"
                TBOX_MijnVakgefilterd.Text = inhoud
        End Select
        ' Sluit de StreamReader class
        objStreamReader.Close()

        Return Nothing
    End Function

    Private Function countXMLNodes(ByVal tbox As String) As String
        Dim aantalNodes As Integer = 0

        Select Case tbox
            Case "tboxMijnKlasOngefilterd"
                For Each line In TBOX_MijnKlasOngefilterd.Lines
                    If line.IndexOf("<vak>") <> -1 Then
                        aantalNodes = aantalNodes + 1
                    End If
                Next
                aantalKlassenOngefilterd = aantalNodes
                LBL_ongefilterdeklas.Text = CStr(aantalKlassenOngefilterd)

            Case "tboxMijnKlasGefilterd"
                For Each line In TBOX_MijnKlasGefilterd.Lines
                    If line.IndexOf("<vak>") <> -1 Then
                        aantalNodes = aantalNodes + 1
                    End If
                Next
                aantalKlassenGefilterd = aantalNodes
                LBL_gefilterdeklas.Text = CStr(aantalKlassenGefilterd)

                ' Vakken gedeelte

            Case "tboxMijnVakOngefilterd"
                For Each line In TBOX_MijnVakOngefilterd.Lines
                    If line.IndexOf("<vak>") <> -1 Then
                        aantalNodes = aantalNodes + 1
                    End If
                Next
                aantalVakkenOngefilterd = aantalNodes
                LBL_ongefilterdevak.Text = CStr(aantalVakkenOngefilterd)

            Case "tboxMijnVakGefilterd"
                For Each line In TBOX_MijnVakgefilterd.Lines
                    If line.IndexOf("<vak>") <> -1 Then
                        aantalNodes = aantalNodes + 1
                    End If
                Next
                aantalVakkenGefilterd = aantalNodes
                LBL_gefilterdevak.Text = CStr(aantalVakkenGefilterd)

        End Select

        Return Nothing
    End Function

    Private Sub writeLogFile()
        Dim bericht As String

        bericht = DateAndTime.Now & " Uit klas " & gekozenKlas & " zijn van de " & aantalKlassenOngefilterd & " gevonden lessen " & aantalKlassenGefilterd & " lessen in Outlook geëxporteerd." & NewLine & _
        DateAndTime.Now & " Uit vak " & gekozenVak & " zijn van de " & aantalVakkenOngefilterd & " gevonden lessen " & aantalVakkenGefilterd & " lessen in Outlook geëxporteerd." & NewLine

        Dim FILE_NAME As String = "log.txt"
        If System.IO.File.Exists(FILE_NAME) = True Then
            Dim objWriter As New System.IO.StreamWriter(FILE_NAME, True)
            objWriter.Write(bericht)
            objWriter.Close()
        Else
            My.Computer.FileSystem.WriteAllText("log.txt", bericht, False)
        End If

    End Sub

    


    Private Sub BTN_maakxml_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_maakxml.Click
        createXML()
    End Sub
End Class













